package singleInstance

/**
 * 单例模式:
 * 个类只有一个实例，而且自行实例化并向整个系统提供这个实例。
 *
 * 举个栗子:
 * 每年供暖的时候,小A都需要给暖气片放放气,所以就需要一把"钳子"去拧一下螺丝,但是小A没有一把"钳子",所以就需要去买一把"钳子"(== new INSTANCE).
 * 但是买一把"钳子"是一个很麻烦的事情(也就是说创建这个对象是一件很消耗资源的事情),所以小A就把"钳子"买过来之后放到了一个抽屉里,当
 * 暖气不热的时候,就直接拿出抽屉里的"钳子"去使用,而不需要再买一把新的"钳子".(对于程序而言就是,就是拿空间换时间)
 *
 * 注意:区分何时使用"单例"何时使用"静态方法",创建一个对象比较费劲的时候,使用单例.创建一个对象没有意义的时候,使用静态方法(比如StringUtils类)
 *
 */
fun main() {
    SingleInstanceOne.print("这是一个‘饿汉式’单例")
    SingleInstanceTwo.instance().print("这是一个‘懒汉式’同步锁的单例")
    SingleInstanceThree.instance.print("这是一个lazy实现同步锁的单例")
}